#include "stm32f10x.h"
#ifndef __epd_H
#define __epd_H

// 重置信号，0为有效，重置信号使能
#define EPD_RES_ENABLE() GPIO_ResetBits(GPIOA, GPIO_Pin_1)

// 重置信号，1为无效，重置信号失能
#define EPD_RES_DISABLE() GPIO_SetBits(GPIOA, GPIO_Pin_1)

// 数据|命令指令，0位写命令
#define EPD_DC_Command() GPIO_ResetBits(GPIOA, GPIO_Pin_0)

// 数据|命令指令，1为写数据
#define EPD_DC_Data() GPIO_SetBits(GPIOA, GPIO_Pin_0)

// 片选信号，0为选择
#define EPD_CS_ENABLE() GPIO_ResetBits(GPIOA, GPIO_Pin_4)

// 片选信号，1为未选择
#define EPD_CS_DISABLE() GPIO_SetBits(GPIOA, GPIO_Pin_4)

// 读取busy状态位，1位空闲，0为忙碌
#define EPD_Busy() GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)

#define ALLSCREEN_GRAGHBYTES 4736

void EPD_Init(void);
void Contrl_Init(void);
void EPD_Update_Part(void);
void EPD_Update_Full(void);
void EPD_POWER_OFF(void);
void EPD_POWER_ON(void);
void EPD_Full_Init(void);
void EPD_Part_Init(void);
void EPD_DeepSleep(void);
void EPD_BlackScreen(void);
void EPD_WhiteScreen(void);
void EPD_WBScreen(void);
void EPD_ShowBMP(const uint8_t *data);
void EPD_16Gray_Init(void);
void EPD_4Graytest(void);
void EPD_8Graytest(void);
void EPD_16Graytest(void);
void EPD_Dis_Part(uint32_t x_start, uint32_t y_start, const uint8_t *datas, uint32_t PART_COLUMN, uint32_t PART_LINE);
void EPD_ShowChar(uint8_t line, uint8_t column, char Char);
void EPD_ShowString(uint8_t line, uint8_t column, char *String);
// void EPD_ShowChinese(uint8_t line, uint8_t column, char *Chinese);
// void EPD_PartChinese(uint8_t line, uint8_t column, uint8_t PIndex);
// void EPD_PartChinesePicture(uint8_t line, uint8_t column, const uint8_t *datas);

#endif
